﻿#ifndef _BASE_INTERFACE_
#define _BASE_INTERFACE_

#include <set>

namespace Base {
namespace Listener {
template<class T>
class Interface {
protected:
  static std::set<T*> listener_;

public:
  virtual ~Interface() {

  }

  static void Add(T* listener) {
    auto it = listener_.find(listener);
    if (it == listener_.end()) {
      listener_.insert(listener);
    }
  }

  static void Remove(T* listener) {
    auto it = listener_.find(listener);
    if (it != listener_.end()) {
      listener_.erase(it);
    }
  }
};

}
}

#endif
